約 3,225,234 件
https://w.atwiki.jp/akasatanahama/pages/21.html
概要 何の機能もない基本的なブロックを追加する。 ソースコード AluminiumMod.java package tutorial.aluminiummod; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; @Mod(modid = "AluminiumMod", name = "Aluminium Mod", version = "1.0.0") public class AluminiumMod { public static Item aluminium; //追加するブロックの宣言 public static Block blockAluminium; @EventHandler public void perInit(FMLPreInitializationEvent event) { aluminium = new Item() .setCreativeTab(CreativeTabs.tabMaterials) .setUnlocalizedName("aluminium") .setTextureName("aluminiummod aluminium"); GameRegistry.registerItem(aluminium, "aluminium"); //Blockを継承したクラスのインスタンスを生成し、代入する。 blockAluminium = new AluminiumBlock(Material.rock) //システム名の登録 .setBlockName("blockAluminium") //テクスチャ名の登録 .setBlockTextureName("aluminiummod aluminium_block"); //GameRegistryへの登録 GameRegistry.registerBlock(blockAluminium, "blockAluminium"); } } AluminiumBlock.java package tutorial.aluminiummod; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; public class AluminiumBlock extends Block { public AluminiumBlock(Material material) { super(material); //クリエイティブタブの登録 this.setCreativeTab(CreativeTabs.tabBlock); //硬さの設定 this.setHardness(5.0F); //爆破耐性の設定 this.setResistance(10.0F); //ブロックの上を歩いた時の音を登録する。 this.setStepSound(Block.soundTypeMetal); //回収するのに必要なツールを設定する。 this.setHarvestLevel("pickaxe", 2); //明るさの設定 this.setLightLevel(0.0F); } } 解説 Block minecraftのブロックはすべてこのクラスを継承している。 modで追加するブロックもこのクラスを継承することになる。 コンストラクタ(Material material) そのブロックのマテリアルを設定する。 Materialにまとめれているので確認されたし。 Block setBlockName(String name) ブロックのシステム名を登録するメソッド。 Block setBlockTextureName(String name) ブロックのテクスチャを登録するメソッド。 アイテムと同様。 Block setCreativeTab(CreativeTabs tab) ブロックをクリエイティブタブに登録するメソッド。 アイテムと同様。 Block setHardness(float hardness) ブロックの硬さを設定する。 数値を上げると硬くなる。 黒曜石は50.0F。金・ラピスラズリ以外の圧縮ブロックが5.0F。net.minecraft.block.Blockを参照。 Block setResistance(float resistance) ブロックの爆破耐性を設定する。 数値を上げると耐えられる爆発力が高くなる。 黒曜石は2000.0F。圧縮ブロックは10.0F。こちらもnet.minecraft.block.Blockを参照。 Block setStepSound(StepSound sound) ブロックの上を歩いたり、破壊したりしたときになる音の種類を設定する。 void setHarvestLevel(String type, int level) typeで適正ツールの種類を指定、levelでレベルを指定する。 レベルは高いほど要求するツールが強力なものになる。 Block setLightLevel(float level) ブロックの光度を設定する。 ここで渡した値に15をかけたものが光源レベルになる。 0.0~1.0以外は無効。 GameRegistry Block registerBlock(Block block, String name) GameRegistryに追加ブロックを登録するメソッド。 使用例 オファレンブロックを追加する部分。 メタデータなどを使っている箇所は省略した。 +オファレンMOD OfalenModCore.java package nahama.ofalenmod; /*略*/ /**@author Akasata Nahama*/ @Mod(modid = OfalenModCore.MODID, name = OfalenModCore.MODNAME, version = OfalenModCore.VERSION) public class OfalenModCore { public static final String MODID = "OfalenMod"; public static final String MODNAME = "Ofalen Mod"; public static final String VERSION = "[1.7.10]1.0.0"; /*略*/ /**最初に行われる処理。アイテム・ブロックの追加などを行う*/ @EventHandler public void preInit(FMLPreInitializationEvent event) { /*略*/ //ブロックを設定するメソッドを実行 OfalenModBlockCore.registerBlock(); /*略*/ } /*略*/ } OfalenModBlockCore.java package nahama.ofalenmod.core; /*略*/ public class OfalenModBlockCore { /*略*/ public static Block blockOfalen; /*略*/ /**ブロックを設定する*/ public static void registerBlock () { /*略*/ blockOfalen = new OfalenBlock() .setBlockName("blockOfalen") .setBlockTextureName("ofalenmod ofalen_block-"); GameRegistry.registerBlock(blockOfalen, ItemOfalenBlock.class, "blockOfalen"); /*略*/ } } OfalenBlock.java package nahama.ofalenmod.block; /*略*/ public class OfalenBlock extends Block { /*略*/ public OfalenBlock() { super(Material.rock); this.setCreativeTab(OfalenModCore.tabOfalen); this.setHardness(7.5F); this.setResistance(15.0F); this.setStepSound(Block.soundTypeMetal); this.setLightLevel(1.0F); this.setHarvestLevel("pickaxe", 3); } /*略*/ } このままテストプレイをしてみると、テクスチャがない状態ではピンクと黒のデフォルトテクスチャになってしまう。 また、名前も、tile.blockAluminium.nameとなる。 これらの解決方法は次回。 コメント この項目に関する質問などをどうぞ。 アルミニウムモッドの時のブロック作成法はないのですか。 - # 2015-07-04 14 49 30 (7月2日までのこのページのソースコードがみたいです。) - # 2015-07-04 14 51 54 ご意見ありがとうございます。現在修正、もしくは併記予定です。 - Tom Kate 2015-07-05 12 22 45 併記する形で修正いたしました。 - Tom Kate 2015-07-05 13 27 24 とても見やすくなってよかったです。ありがとうございます。 - # 2015-07-05 14 46 28 ブロックの面によってテクスチャを変えるにはどうしたらよいのでしょうか - 名無しさん 2015-07-05 20 20 18 ご意見ありがとうございます。使えるメソッドのgetIcon と registerBlockIconsに追記いたしました。 - Tom Kate 2015-07-06 19 56 48 一時的に削除します。「メタデータを持つブロックの追加」で触れるよう修正する予定です。 - 赤砂蛇凪浜 2015-07-10 21 12 56 遅くなりましたが、修正が完了しました。 - 赤砂蛇凪浜 2015-07-23 12 35 35 申し訳ありません blockAluminium = new AluminiumBlock(Material.rock) の部分でなぜかいつもAluminiumBlockのところにエラーが付きますどうすればよいでしょうか?丸コピペしたソースコードを使ってもそうなります - 名無しさん 2015-09-19 15 28 50 クラッシュレポートをクラウドサービスか何かにおいていただいて、urlを送っていただくことはできますか? - Tom Kate 2015-09-19 15 59 11 クラッシュレポートを見せていただければ、こちらで対応いたします。 - Tom Kate 2015-09-19 15 59 49 net.minecraft.block.Blockを参照 と書かれているのですが、どうやって参照するのですか? - 名無しさん 2015-11-01 17 26 38 AluminiumBlock.javaをeclipse上で開き、...extends Block {...のBlockにカーソルを合わせてF3を押せば、Block.classを表示することができます。Blockにはバニラのブロックを追加している部分があるので、そこを見れば、バニラのブロックがどういう設定をされているかを知ることができます。 - 赤砂蛇凪浜 2015-11-04 19 23 57 ブロックを複数追加し、クリエイティブタブも参考にさせていただき作成できました。ですが、ブロック1、ブロック2と数を増やしていくとタブ内での並び順がバラバラになってしまいます。この場合どうすればよいのでしょうか? - 名無しさん 2016-03-05 20 30 20 forge側の不具合で、既存のワールドのクリエイティブタブにアイテム・ブロックを追加すると順序がばらばらになってしまいます。新しくワールドを作り直すと正しい順で表示されると思います。お試しください。 - 赤砂蛇凪浜 2016-03-06 09 15 21 返信ありがとうございます。ワールドを再生成しましたが直りませんでした。。何か設定し忘れているのでしょうか……。ブロックの並び順はブロックIDで決められているのですよね? - 名無しさん 2016-03-07 19 11 47 はい。ブロックIDはMOD側から指定することができないため、基本的にGameRegistryに登録した順ですね。 - 赤砂蛇凪浜 2016-03-07 20 38 17 多分、そこが自分は理解できてないと思うんです。登録順を並べるにはどうすればいいのでしょう?また、registerBlock(X, "Y");このXとYはどういう値にすればうまく並べれるのでしょうか。今は - 名無しさん 2016-03-07 21 40 26 (○○1, "1")、(○○2, "2")という感じになっています - 名無しさん 2016-03-07 21 41 41 おそらく、GameRegistry.registerBlockを呼び出した順だと思われます。 - 赤砂蛇凪浜 2016-03-08 21 37 25 呼び出し順を変える方法を教えて頂きたいです! - 名無しさん 2016-03-09 23 14 39 コード内で記述する順を変えるだけです。 - 赤砂蛇凪浜 2016-03-10 19 21 04 記述する順番はしっかりならべてるんだけどなぁ・・・。どうしても解決できません。。。メタブロックの追加だとうまく表示できたのでそちらに切り替えることにします。初心者に丁寧に教えていただいてありがとうございました!(涙) - 名無しさん 2016-03-13 20 55 45 基本的にできないことはわかっていることを前提として置いて質問します。何か裏技的な形でブロックid - anatawa12 2016-12-16 01 01 27 続き 裏技的な形でブロックidを指定することはできませんか? - anatawa12 2016-12-16 01 03 10 私達も試したことがないためはっきりとしたことは言えません。すみません。以下は軽く調べてみた結果で、間違っている可能性がありますので、ご了承ください。Forgeのシステムに入り込む形で指定することは可能かもしれませんが、簡単ではないと思います。Forgeのブロック追加処理は、GameRegistryからGameData、FMLControlledNamespacedRegistryを経由して行っているようです。ブロックIDは、GameDataやFMLControlledNamespacedRegistryでItem IDとの対応を見ながら決定しているようです。GameData.getMain()がprotectedに指定されているため、代替メソッドを作ろうとしたらそこで詰まりました。 - 赤砂蛇凪浜 2016-12-17 18 26 34 返信ありがとうございます やっぱり難しいですよね 1.7にはたを1.8のidで追加するmodを作ろうと思ったのですが、、 - anatawa12 2016-12-22 15 51 48 質問です。レッドストーンブロックのようにブロックをレッドストーン動力源にするにはどうすればいいのでしょうか? - 名無しさん 2017-01-07 16 00 06 レッドストーンブロックのクラスであるBlockCompressedPoweredを見るとわかると思いますが、以下のようにすればよいです。canProvidePowerをオーバーライドし、常にtrueを返す。isProvidingWeakPowerをオーバーライドし、常に15を返す。 - 赤砂蛇凪浜 2017-01-10 16 06 40 解決しました!! もうひとつ質問なんですけどブロックが光を透過するようにするにはどうすればいいのでしょう。 - 名無しさん 2017-01-11 20 39 31 こっちも解決しました!! .setLightOpacityというメソッドを使いました。 - 名無しさん 2017-01-14 15 12 24 このブロックを階段にするにはどうすればいいですか? - 名無しさん 2017-02-04 16 05 17 返信が遅くなってしまい申し訳ありません。今後チュートリアルを作成する予定です。また、単純な階段ならば、BlockStairsのインスタンスを生成することで実装できます。以下、そのサンプルです。perInitに追記すれば動作します。stairsAluminium = new BlockStairs(blockAluminium, 0).setBlockName("stairsAluminium").setBlockTextureName("aluminiummod aluminium_block");stairsAluminium.setCreativeTab(CreativeTabs.tabBlock);stairsAluminium.setHarvestLevel("pickaxe", 2);stairsAluminium.useNeighborBrightness = true;GameRegistry.registerBlock(stairsAluminium, "stairsAluminium"); - 赤砂蛇凪浜 2017-02-23 17 46 40 名前
https://w.atwiki.jp/mcmodserver/pages/12.html
このサーバーで導入しているmodの一覧です。括弧内は一般的な略称となります。それぞれのリンクで解説wikiに飛ぶことができます。*解説しているヴァージョンとして古い可能性がありますのでご注意ください。 mod名 解説リンク 簡易解説 RealTrainMod new! wiki 鉄道mod。幅が3マスある線路、電車などを追加する。本格的な鉄道を作れる BiblioCraft new! 全般的な解説ページなし 家具mod。様々な家具を追加する。独自のGUIを持ち特殊な動作をする物も多い。 MineFactoryReloaded2 http //www26.atwiki.jp/minecraft/pages/991.html 工業系mod、RFを扱う。多様なマシンがあり自動化の幅が広がる。 Buildcraft(BC) http //www26.atwiki.jp/minecraft/pages/189.html 工業系mod、パイプを使った輸送が特徴。 IndustrialCraft² experimental(IC2) http //www26.atwiki.jp/minecraft/pages/1173.html 工業系mod、エネルギーとしてEUを扱う。 EnderIO http //www26.atwiki.jp/minecraft/pages/1164.html 工業系mod、BCと同じRFエネルギーを扱う。エンダーパールを用いる物が多い。 SextiarySector2(SS2) http //www26.atwiki.jp/minecraft/pages/1337.html 汎用系mod、水分、スタミナ、MPなどの新しいステータスの追加、GFエネルギーを扱う。 Tinkers Construct(TinC) http //www26.atwiki.jp/minecraft/pages/1125.html ツール追加系mod、いくつかのパーツを組み合わせてツール、武器を作ると言うもの。 Railcraft(RC) http //www26.atwiki.jp/minecraft/pages/377.html トロッコや線路を多く追加するmod。輸送が捗る。 Ars Magica2(AM2) http //www26.atwiki.jp/minecraft/pages/1134.html 魔術系mod、自分で魔法を作るというmod。効果や形状を組み合わせる。 ThaumCraft4(TC4) http //www26.atwiki.jp/minecraft/pages/1129.html 魔術系mod。自然に存在する<相>というものを利用し、魔法を行使する。 AncientWarfare2(AW2) http //www26.atwiki.jp/minecraft/pages/1190.html 兵士mod。色々な命令のできるNPCや、攻城兵器などを追加する。マップに砦や城などを追加する。 竹mod http //www26.atwiki.jp/minecraft/pages/645.html 和風mod。竹や桜といった和風なアイテムを追加する。和風な建築にどうぞ。 豆腐craft http //www26.atwiki.jp/minecraft/pages/1103.html 豆腐mod。豆腐を多く追加。またTFという謎エネルギーを追加する。 Metallurgy4 http //www26.atwiki.jp/minecraft/pages/851.html 鉱石mod。多くの鉱石を追加する。それぞれの武器やツールを作れる。 craftguide http //konbu-coupe.sakura.ne.jp/13/modCapture/craftGuide1601/craftGuide/ レシピを閲覧できるアイテムを追加するmod。 黄昏の森 http //www26.atwiki.jp/minecraft/pages/448.html Dimention追加mod。常に夕方という異世界を追加するmod。ダンジョンやボスが多く存在 caveworld wiki Dimention追加mod。地下世界という異世界を追加するmod。地上がなく、最高度から地底まですべてが地下洞窟となっている
https://w.atwiki.jp/akasatanahama/pages/129.html
mcmod.infoを利用するのをやめて、この方法に移行しました。 - 飽き性 2016-12-29 23 16 55 すみません、上は誤爆です。 続きから書きます。しかしいざgradlew buildをしてmodsに入れてもZip file ExapleMod-1.0.jar failed to read properly, it will be ignoredと出て読み込まれません。どのようにすると読み込まれるのでしょうか、教えてくださると助かります。必要ならpastebinなどでソースも公開します - 飽き性 2016-12-29 23 21 22 原因として考えられるもののとして、@Modアノテーションの記述が間違っている、もしくはModInfo.loadInfo(meta);を忘れているというものが考えられます。二つに当てはまらない場合は、お手数ですが返信下さい。 - Tom Kate 2016-12-30 18 08 02 ModInfoのURL等の少し省略していたものを追加したりなどしましたが、今までと同様のメッセージが表示され読み込まれませんでした。 - 飽き性 2016-12-30 21 38 43 ワークスペースを作り直してみると解決しました。返信ありがとうございました! - 飽き性 2017-01-06 11 31 48
https://w.atwiki.jp/v2cwiki/pages/141.html
目次 ローカル板について ローカル板の作成 ローカルスレッドにこのレスを追加 書き込み内容をローカルスレッドに保存 ローカル板関連のスクリプトimageExtract.js sortResThread.js newresthread.js ImageResThread.js resExtract.js ローカル板の活用 ローカル板について 参照: V2C 使用法 ユーザ定義板・ローカル板 の「ローカル板」 ローカル板とは、ローカルに作成されたWebを介さない自分だけの板のことです。ユーザ定義板一覧に作成できます。その板内では、ローカルスレッドとして、新規スレッドを立て、書き込むことができます。メモをはじめ、日記やリンク集、AA倉庫として活用することができます。また、通常のスレッドから、気に入ったレスを、ローカルスレッドへスクラップすることや、自分が2ちゃんねるに書き込んだレスを自動で送ることもできます。 参考: 窓の杜 ローカルに自分専用の板を作成できる2ちゃんねるブラウザー「V2C」v2.4.0 ローカル板の作成 板一覧「ユーザ定義」タブを開く。 ローカル板を作成したい場所で「右クリック」→「ローカル板の作成」。 板の名称と、ログを保管するフォルダの名称を入力。 ローカルスレッドにこのレスを追加 ローカル板のローカルスレッドに、気に入ったレスをスクラップしておくことができます。 使い方ローカル板、及びローカルスレッドを作成してあることを確認。 スクラップしたいレスのレス番号上から「右クリック」→「ローカルスレッド」→「このレスを追加」 スクラップ先のローカルスレッドを選択。 書き込み内容をローカルスレッドに保存 参照: V2C 使用法 書き込み設定 の「書き込み内容をローカルスレッドに保存」」 ローカル板のローカルスレッドに、自分が2ちゃんねるに書き込んだレスを自動で保存しておくことができます。 使い方き込み履歴を残すローカル板を用意。ここでは仮に、板名:書き込み、フォルダ名:kakikomi、として登録する。 メニュー」→「設定」→「書き込み」→「一般」→「書き込み内容をローカルスレッドに保存」にチェックを入れる。 らにその下のリストボックスから”書き込み”板を選択し、スレの切り替え条件を選択する。 これで準備完了。次回書き込みの際には、自動で書き込み板に新規スレッドが立ち、書き込み内容が保存される。 ※他のローカル板への書き込みには、この機能は適用されません。 関連項目: Jane互換ファイルの「kakikomi.txt」 ローカル板関連のスクリプト ローカル板を活用するためのスクリプトを以下に紹介します。スクリプトのダウンロードはスクリプト一覧から、設定はスクリプトを参考にしてください。 imageExtract.js +imageExtract.js を展開 概要 ローカル板の機能拡張スクリプト。開いているスレッドから画像が含まれるレスのみを抽出し、ローカルスレッドを作成する。 元レス http //yy61.60.kg/test/read.cgi/v2cj/1252074124/851 設定方法 こちらの移動先にある『imageExtract.js』から同ファイルをダウンロードします。 その後の設定方法については スクリプトの「設定方法」 を参考にしてください。 【登録場所】 全体・レス表示 【ラベル】 画像レスまとめ(単スレ) 【コマンド】 ${SCRIPT Fw} imageExtract.js ローカル板のフォルダ コメント 名前 コメント sortResThread.js +sortResThread.js を展開 概要 ローカル板の機能拡張スクリプト。レス表示欄に開いているTwitter、ローカル板以外の全てのスレッドから、レスを時間順にソートしてまとめ、ローカルスレッドを作成する。また、アクティブなローカルスレッドに対して使用すると、そのレス順を時間でソートすることができる。 元レス http //yy61.60.kg/test/read.cgi/v2cj/1252074124/670,672 設定方法 こちらの移動先にある『sortResThread.js』から同ファイルをダウンロードします。 その後の設定方法については スクリプトの「設定方法」 を参考にしてください。 【登録場所】 全体・レス表示 【ラベル】 ソートしてまとめ 【コマンド】 ${SCRIPT Fw} sortResThread.js ローカル板のフォルダ コメント 名前 コメント newresthread.js +newresthread.js を展開 概要 ローカル板の機能拡張スクリプト。レス表示欄に開いている全ての未読有スレッドから、新着レスをまとめ、ローカルスレッドを作成する。 元レス http //yy61.60.kg/test/read.cgi/v2cj/1252074124/646,649 設定方法 こちらの移動先にある『newresthread.js』から同ファイルをダウンロードします。 その後の設定方法については スクリプトの「設定方法」 を参考にしてください。 【登録場所】 全体・レス表示 【ラベル】 新着レスまとめ 【コマンド】 ${SCRIPT Fw} newresthread.js ローカル板のフォルダ コメント 名前 コメント ImageResThread.js +ImageResThread.js を展開 概要 ローカル板の機能拡張スクリプト。レス表示欄に開いているTwitter、ローカル板以外全てのスレッドから、画像が含まれるレスをまとめ、ローカルスレッドを作成する。スレを横断して画像表示ウィンドウやサムネイルモードで一括表示させたい時にどうぞ。 元レス http //yy61.60.kg/test/read.cgi/v2cj/1252074124/647,650 設定方法 こちらの移動先にある『ImageResThread.js』から同ファイルをダウンロードします。 その後の設定方法については スクリプトの「設定方法」 を参考にしてください。 【登録場所】 全体・レス表示 【ラベル】 画像レスまとめ 【コマンド】 ${SCRIPT Fw} ImageResThread.js ローカル板のフォルダ名 コメント 名前 コメント resExtract.js +resExtract.js を展開 概要 ローカル板の機能拡張スクリプト。アクティブなスレッドから、選択単語or指定単語が含まれるレスを抽出し、ローカルスレッドを作成する。 備考 レス表示から実行する場合検索ボックスを表示します。 正規表現は不可。 抽出の検索対象は本文のみ。 元レス http //yy61.60.kg/test/read.cgi/v2cj/1252074124/651 設定方法 こちらの移動先にある『resExtract.js』から同ファイルをダウンロードします。 その後の設定方法については スクリプトの「設定方法」 を参考にしてください。 【登録場所】 全体・レス表示・選択テキスト 【ラベル】 選択単語でレス抽出 指定単語でレス抽出 【コマンド】 ${SCRIPT Fw} resExtract.js ローカル板のフォルダ名 コメント 名前 コメント ローカル板の活用 +ローカル板の活用 を展開 ローカル板活用法投稿フォーム ※wikiのリンクや画像を表示する機能を使いたい方は、投稿フォームからではなく、直接本ページを編集して投稿してください。 (投稿フォーム仕様:1レスにつき10行、1500文字まで) コメント テスト専用のスレを立てる。テストし放題 あ 規制報告用に、荒らしのレスを溜めておく スレ立て誤爆をしやすいため、ローカル板編集の際は、オフラインにする テキスト選択ができる書き込みプレビューとして使う 誰かの発言集 抜けるSS集とか俺的エロ画像リンクまとめ レスのクリップはマーカーとか付箋でやってたけど ローカルスレッドだとまとめて全部表示できるからこっちの方が好きだわ テンプレみたいな複数レス用のメモ作成したい場合に便利 作成中に間違って本スレに投稿してしまうこともない レスのスクラップ帳 2ch関連のアカウントの管理 2chのURLをはっつければポップアップで内容も見れるしいろいろ捗る AAエディタがない環境でAA弄るのにいいな コピペ集 リンク集 AA倉庫 気に入ったレスのまとめ 日記帳、チラ裏 メモ帳、備忘録
https://w.atwiki.jp/mypcmemo/pages/295.html
ストレージ SSD プチフリ KINGMAX Zeus PX3280シリーズ BX500 IO-DATA ADATA S511 ADATA S511シリーズ AS511S3-60GM-C S511 Powerful 6Gb/sec Solid State Drive nicovideoエラー ( 正しい動画URLを入力してください. ) Intel Solid State Drive Toolbox 【2017年版】Windows 7におけるSSDの設定方法と最適化 - 公安9課 【2017年版】Windows 10におけるSSDの設定方法と最適化 - 公安9課 プチフリ http //diy-resort.seesaa.net/article/347447283.html http //www.pc-info.sakura.ne.jp/ssd-putifuri.html nicovideoエラー ( 正しい動画URLを入力してください. ) nicovideoエラー ( 正しい動画URLを入力してください. ) nicovideoエラー ( 正しい動画URLを入力してください. ) nicovideoエラー ( 正しい動画URLを入力してください. ) nicovideoエラー ( 正しい動画URLを入力してください. ) nicovideoエラー ( 正しい動画URLを入力してください. ) link[[ tag[[ mylist[[ community[[ back
https://w.atwiki.jp/ulilith-face/pages/5.html
このサイトについて このWikiサイトは、「 Project9k 」さんで配布されている Windows用サウンドプレイヤーソフト、 Sound Player Lilith for Unicode OSs(uLilith)のフェイス(スキンファイル)の 基本的な作り方をまとめたサイトです。 このサイトのフェイス作成法解説の内容は、 uLilithのインストールフォルダのDocフォルダ内に添付されている 「フェイス定義仕様書.txt」 「フェイスコマンド仕様書.txt」 及び、SDKフォルダ内のサンプルプラグインのReadMe.txtの内容を元にしています。 なお、このwikiではフェイス作成の基本的な部分については説明していますが 上記の仕様書の内容全てをカバーしているわけではないのでご了承ください。 特にコマンド関係は、基本的な設定方法は説明してはいますが 各コマンド個別の設定方法の詳細など、 ここで説明していない部分が多いので 必要に応じて上記の仕様書を参照してください。 各章について 基礎知識編 uLilithフェイスの定義ファイルの記述のしかたや仕組みなど 主に、uLilithフェイスのフェイス定義に関する基本的な情報についてまとめてあります。 フェイス作成基礎編 フェイスの基本設定や各フェイスアイテムの配置方法など 基本的なフェイスの作り方についてまとめてあります。 フェイス作成応用編 サブウィンドウの利用や、サイズ変更可能なフェイスの作成、 コマンドによるフェイス全体やフェイスアイテムの設定変更などを利用した 複雑な機能を備えたフェイスの作り方をまとめてあります。 その他 その他、資料など 「各フィールドに設定可能なキー一覧」と、 wiki内の各キーの設定一覧表・画像による説明図をまとめたページを作成しました。 対応バージョン uLilithの開発版バージョン「Ver.1.0 pre-Beta.4(2011/11/27)」以降の フェイス仕様を解説しています。 これ以前の日付の開発版、及び安定版「Ver.1.0 Beta.3」での仕様とは 異なる部分があるのでご注意ください。 (2016/08/24更新) 現在、uLilith Ver.1.0 pre-Beta.4(2016/08/22)版までに 追加されたコマンド・キーなどについて各解説ページに追加してあります。 このサイトに関するご連絡・お問い合わせについて このWikiサイトはプレイヤー配布元とは別の、非公式なサイトです。 解説についてのご質問、表記や記述内容の間違いがあった場合など このサイトのページ内容についてのご質問やご意見は ページ編集・管理者の静荷(連絡先はこちらです)へお願いします。
https://w.atwiki.jp/senmetu-tanikazu/pages/8.html
日本語MOD導入方法を説明します。 鯖主はwinXPなんで、winXPの方法で、やらせていただきます。 諸注意:7-zipをいれたことを前提に説明していきます。 手順1 スタートボタンを押して、「ファイル名を指定して実行」 そこで「%appdata%」と入力してOKを押す。 その後、フォルダがたくさん出てくるので、「.minecraft」を開く。 手順2 このような画面が出てくると思います。 「bin」フォルダがあれば問題なく導入できます。 「bin」フォルダを開きましょう。 手順3 「bin」フォルダの中にある minecraft.jar( .jarが付いていない場合もあります。)を 右クリックして、7-zipで開いてください。 手順4 まずは、NihongoMODとModloader(Modloaderはクリックすればそのままダウンロードできます) をダウンロードしてきて、それぞれも7-zipで開きます。 手順5 minecraft.jarに、Modloader , NihongoMODの順に全て入れていきます。 手順6 mineccraft.jarの中に、「META-INF」というフォルダがあるはずです。(バニラの場合) それを右クリック⇒削除しましょう。 ※出来ない場合などは、バージョンが合ってるかきちんと確認をしてください。
https://w.atwiki.jp/hunter-ro/pages/16.html
プロンテラ(prontera) 聖カピトーリナ修道院(prt_monk) イズルード(izlude) ジャワイ(jawaii) ゲフェン(geffen) フェイヨン(payon) アーチャーの町(pay_arche) モロク(morocc) ピラミッド前(moc_ruins) アルベルタ(alberta) アルデバラン(aldebaran) ルティエ(lutie) コモド(comodo) ジュノー(yuno) アマツ(amatsu) コンロン(gonryun) ウンバラ(umbala) ニブルヘイム(niflheim) 龍之城(louyang) アユタヤ(ayothaya) アインブロック(einbroch) アインベフ(einbech) リヒタルゼン(lighthalzen) フィゲル(hugel) ラヘル(rachel) ベインス(veins) モスコビア(moscovia) ブラジリス(brasilis) ミッドガルド連合軍駐屯地(mid_camp) 前線基地 スプレンディッド(splendide) 鉱山の街 マヌク(manuk) サファ族の首都エルディカスティス(dicastes01) ブルーメヴァルト(dicastes02)
https://w.atwiki.jp/svr2008caw/pages/41.html
【24/7 Mode】 SVR2008攻略 24/7 Modeの攻略情報まとめ このモード、前作のシーズンモードとGMモードを統合した内容です。 【モード解説】 Play as WWE Superstar 既存のスパスタを主人公にしてスタート。前作のシーズンに該当。 Play as Created Superstar 作成したCAW選手でスタート。ただし男性CAWのみ。女性CAW不可。 Play as WWE General Manager 各ブランドのGMになってスタート。前作のGMモード。 【一番楽な設定】 始める前に設定すること GMモード開始後、PC選択してReports開く オプションのPlay Optionsを選択 英語で「選手の負傷の有無」とかあるので全部OFF これで選手の負傷の影響は無いので安心してスキップできる。 (一番下の2つはGMモード達成クリア後に選択可能) また、Play Optionsは「Re-Run」がオススメ。 一度設定した先週の試合の内容設定を覚えて継続してくれるので スキップが大幅に楽になる。 (次のPPVまで試合設定しなくてOKなので楽) 【Play as WWE Superstarで一番楽な進め方・稼ぎ方】 24/7 Modeで 強い選手を選びPlay as WWE Superstarを選択。 (難易度レジェンドを選んだ方が稼ぎやすい?) カレンダーの一番下の最後の月の日付を選択、 「この日までの経過をシミュレートします。よろしいですか?」で「はい」選択。 あとはシミュレートしてスキップするだけ。 スキップして放置してる間、イベントは進むし、 お金も溜まる。 (強い選手ならシミュレートした試合は勝ちやすい) 3~4年続ければ、店のアイテムのほとんど買えるハズ。 【Play as WWE General Managerで楽な進め方】 Play as WWE General Manager選択後は 上記と同じようにスキップ。 強くて人気のある選手を事前に揃えるのが理想。 ただし、スキップ前には 怪我の有無のオプション設定、選手の契約期間には注意。 また、このモードではWWE Shopで使えるお金は手に入らない。 この方法では確実に他のブランドに必ず勝てないので GMモード達成するには次の方法がオススメ 【Play as WWE General Manager攻略法】 (まとめ中) 他のGMに勝って、ビンスに表彰されるには 「他のブランドより人気が高い状態になる」のが必須。 Fan Supportの人気グラフが他のブランドより高い状態で1年乗り切ればOK。 そのためには、次のようにすれば人気が上がりやすい。 人気の高い&強い男性選手を6人以上そろえる事 (クリーン、ダーティが半々だと なお良し) その6人にChampionのベルトを全部設定して、 毎週試合でベルトをかけて試合をさせる事 Rivalriesでライバル抗争のシナリオを選択。 4つ星以上の効果の高いものを選択。 (クリーンとダーティがペアだと選びやすい。 また定期的にライバル関係が終わってないか、マメにチェックすること。 終わってたら選びなおす。) 試合をさせるとき、必ず2回のPromoでTitle Match Hypeを選択、 人気を上げたいベルトの試合前に必ずPromoを行い人気を上げる。 通常の試合はハードコアがオススメ。 (4人ハードコアの試合で奪い合えば なお上がりやすい) 自分のPPV1週間前の試合のPromoは PPV Hypeを必ず行い、PPVのプロモーション。 PPVになったら試合は ベルトをかけた6人制、4人制のHell in a Cellがオススメ。 6人だとArmageddon Hell in a Cell、超オススメ。 ・・・以上の基本的な進め方で、人気が上がりやすいと思います。 特にPPV試合後には他ブランドより大きく差がつくはず。 やる事は前作とほとんど同じです。 それでも人気が上がらない場合、 今回増えた要素を選択します。 相手の試合がある日にEvents Activitiesを選択。 自分の人気&実力のある選手でOther Brand Invasionを選択。 相手のショーに乗り込んでアピールして妨害、 人気を上げます。 上記の効果を上げたい場合、 何もない日にマイクスキルなどを訓練、 僅かながら効果が上がります。 自分のPPV1週間前の平日にはPPV Commercialに看板選手を出すのも良し。。 現金も貰えます。 上記のポイントを抑えて継続すれば 人気が右肩上がりになり、 他ブランドに勝てるはず。 ビンスに褒めてもらえます。 (以後更新予定) 「WWE2008 SmackDown vs Raw」(SVR2008、エキプロ9) 【コメントする】 名前 コメント
https://w.atwiki.jp/akasatanahama/pages/103.html
概要 新しく苗木・原木・葉を追加し、苗木が育ったら木が生成されるようにする。 今回は一つのIDで一種類の木しか追加していないが、バニラの木のようにメタデータを利用して何種類かの木を追加することも可能。 ※5/22更新 葉のテクスチャの指定ができていなかったため、追記・修正しました。 テクスチャは、sapling_aluminium,log_aluminium_top,log_aluminium_side,leaves_aluminium,leaves_aluminium_opaqueでそれぞれ指定できます。 ソースコード AluminiumMod.java package tutorial.aluminiummod; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.block.Block; import net.minecraftforge.oredict.OreDictionary; @Mod(modid = AluminiumMod.MODID, name = AluminiumMod.MODNAME, version = AluminiumMod.VERSION) public class AluminiumMod { public static final String MODID = "AluminiumMod"; public static final String MODNAME = "Aluminium Mod"; public static final String VERSION = "1.0.0"; public static Block saplingAluminium; public static Block logAluminium; public static Block leavesAluminium; @EventHandler public void perInit(FMLPreInitializationEvent event) { saplingAluminium = new BlockAluminiumSapling() .setBlockName("saplingAluminium") .setBlockTextureName("aluminiummod sapling_aluminium"); GameRegistry.registerBlock(saplingAluminium, "saplingAluminium"); OreDictionary.registerOre("saplingAluminium", saplingAluminium); logAluminium = new BlockAluminiumLog() .setBlockName("logAluminium") .setBlockTextureName("aluminiummod log_aluminium"); GameRegistry.registerBlock(logAluminium, "logAluminium"); OreDictionary.registerOre("logAluminium", logAluminium); leavesAluminium = new BlockAluminiumLeaves() .setBlockName("leavesAluminium") .setBlockTextureName("aluminiummod leaves_aluminium"); GameRegistry.registerBlock(leavesAluminium, ItemAluminiumLeaves.class, "leavesAluminium"); OreDictionary.registerOre("leavesAluminium", leavesAluminium); } } BlockAluminiumSapling.java +長いので囲みます package tutorial.aluminiummod; import static net.minecraftforge.common.EnumPlantType.*; import java.util.List; import java.util.Random; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.BlockSapling; import net.minecraft.block.IGrowable; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraft.world.gen.feature.WorldGenerator; import net.minecraftforge.common.EnumPlantType; import net.minecraftforge.common.IPlantable; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.event.terraingen.TerrainGen; public class BlockAluminiumSapling extends BlockSapling implements IPlantable, IGrowable { public BlockAluminiumSapling() { super(); this.setCreativeTab(CreativeTabs.tabDecorations); this.setTickRandomly(true); this.setHardness(0F); this.setStepSound(soundTypeGrass); float f = 0.4F; this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f * 2.0F, 0.5F + f); } @Override public boolean canPlaceBlockAt(World world, int x, int y, int z) { // Blockで上書き可能なブロックかどうかの判定をしているが、BlockBushでcanBlockStayの判定を追加している。 return world.getBlock(x, y, z).isReplaceable(world, x, y, z) this.canBlockStay(world, x, y, z); } @Override protected boolean canPlaceBlockOn(Block block) { // 草、土、耕された土ならtrueを返す。 return block == Blocks.grass || block == Blocks.dirt || block == Blocks.farmland; } @Override public void onNeighborBlockChange(World world, int x, int y, int z, Block block) { this.checkAndDropBlock(world, x, y, z); } @Override protected void checkAndDropBlock(World world, int x, int y, int z) { if (!this.canBlockStay(world, x, y, z)) { this.dropBlockAsItem(world, x, y, z, world.getBlockMetadata(x, y, z), 0); world.setBlockToAir(x, y, z); } } @Override public boolean canBlockStay(World world, int x, int y, int z) { // 下のブロックのcanSustainPlantで判定している。 return world.getBlock(x, y - 1, z).canSustainPlant(world, x, y - 1, z, ForgeDirection.UP, this); } @Override public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { // 当たり判定を消すため、nullを返している。 return null; } @Override public boolean isOpaqueCube() { return false; } @Override public boolean renderAsNormalBlock() { return false; } @Override public int getRenderType() { return 1; } @Override public EnumPlantType getPlantType(IBlockAccess world, int x, int y, int z) { return Plains; } @Override public Block getPlant(IBlockAccess world, int x, int y, int z) { return this; } @Override public int getPlantMetadata(IBlockAccess world, int x, int y, int z) { return world.getBlockMetadata(x, y, z); } @Override public void updateTick(World world, int x, int y, int z, Random random) { // サーバー側で、checkAndDropBlock・明るさの判定を行い、条件を満たしていれば1/7の確率で成長する。 if (!world.isRemote) { this.checkAndDropBlock(world, x, y, z); if (world.getBlockLightValue(x, y + 1, z) = 9 random.nextInt(7) == 0) { this.func_149879_c(world, x, y, z, random); } } } @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { // Blockと同様。 return blockIcon; } @Override public void func_149879_c(World world, int x, int y, int z, Random random) { // 一度も成長していないなら一段階成長させ、二段階目なら木を生成する。 // 一段階目の成長が終わったかどうかは、メタデータの二進数四桁目で判断する。 int meta = world.getBlockMetadata(x, y, z); if ((meta 8) == 0) { world.setBlockMetadataWithNotify(x, y, z, meta | 8, 4); } else { this.func_149878_d(world, x, y, z, random); } } @Override public void func_149878_d(World world, int x, int y, int z, Random random) { // Eventを呼び出しているが、他MODでキャンセルされたくなければこの部分は削除してよい。 if (!TerrainGen.saplingGrowTree(world, random, x, y, z)) return; // メタデータを利用して複数種類の木を追加したい場合はバニラの苗木を参考にするとよい。 int meta = 0; // 大木を生成したい場合はこの部分を参考にするとよい。 // Object object = random.nextInt(10) == 0 ? new WorldGenBigTree(true) new WorldGenTrees(true); Object object = new WorldGenAluminiumTrees(true); world.setBlock(x, y, z, Blocks.air, 0, 4); if (!((WorldGenerator) object).generate(world, random, x, y, z)) { world.setBlock(x, y, z, this, meta, 4); } } @Override public boolean func_149880_a(World world, int x, int y, int z, int type) { return world.getBlock(x, y, z) == this (world.getBlockMetadata(x, y, z) 7) == type; } @Override public int damageDropped(int meta) { // Blockと同様。 return 0; } @Override @SideOnly(Side.CLIENT) public void getSubBlocks(Item item, CreativeTabs tab, List list) { // Blockと同様。 list.add(new ItemStack(item, 1, 0)); } @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister register) { // Blockと同様。 blockIcon = register.registerIcon(this.getTextureName()); } @Override public boolean func_149851_a(World world, int x, int y, int z, boolean isRemote) { return true; } @Override public boolean func_149852_a(World world, Random random, int x, int y, int z) { return world.rand.nextFloat() 0.45D; } @Override public void func_149853_b(World world, Random random, int x, int y, int z) { this.func_149879_c(world, x, y, z, random); } } WorldGenAluminiumTrees.java +長いので囲みます package tutorial.aluminiummod; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.BlockSapling; import net.minecraft.block.material.Material; import net.minecraft.init.Blocks; import net.minecraft.util.Direction; import net.minecraft.world.World; import net.minecraft.world.gen.feature.WorldGenAbstractTree; import net.minecraftforge.common.util.ForgeDirection; public class WorldGenAluminiumTrees extends WorldGenAbstractTree { private final int minTreeHeight; private final boolean vinesGrow; private final int metaWood; private final int metaLeaves; public WorldGenAluminiumTrees(boolean doBlockNotify) { this(doBlockNotify, 4, 0, 0, false); } public WorldGenAluminiumTrees(boolean doBlockNotify, int minTreeHeight, int metaWood, int metaLeaves, boolean vinesGrow) { super(doBlockNotify); this.minTreeHeight = minTreeHeight; this.metaWood = metaWood; this.metaLeaves = metaLeaves; this.vinesGrow = vinesGrow; } @Override public boolean generate(World world, Random random, int x, int y, int z) { int l = random.nextInt(3) + minTreeHeight; if (y 1 || y + l + 1 256) return false; byte b0; int k1; Block block; for (int iy = y; iy = y + 1 + l; ++iy) { b0 = 1; if (iy == y) { b0 = 0; } if (iy = y + 1 + l - 2) { b0 = 2; } for (int ix = x - b0; ix = x + b0; ++ix) { for (int iz = z - b0; iz = z + b0; ++iz) { if (iy 0 || iy = 256) return false; block = world.getBlock(ix, iy, iz); if (!this.isReplaceable(world, ix, iy, iz)) return false; } } } Block block2 = world.getBlock(x, y - 1, z); boolean isSoil = block2.canSustainPlant(world, x, y - 1, z, ForgeDirection.UP, (BlockSapling) AluminiumMod.saplingAluminium); if (!isSoil || y = 256 - l - 1) return false; block2.onPlantGrow(world, x, y - 1, z, x, y, z); b0 = 3; byte b1 = 0; int l1; int i2; int j2; int i3; for (k1 = y - b0 + l; k1 = y + l; ++k1) { i3 = k1 - (y + l); l1 = b1 + 1 - i3 / 2; for (i2 = x - l1; i2 = x + l1; ++i2) { j2 = i2 - x; for (int k2 = z - l1; k2 = z + l1; ++k2) { int l2 = k2 - z; if (Math.abs(j2) != l1 || Math.abs(l2) != l1 || random.nextInt(2) != 0 i3 != 0) { Block block1 = world.getBlock(i2, k1, k2); if (block1.isAir(world, i2, k1, k2) || block1.isLeaves(world, i2, k1, k2)) { this.setBlockAndNotifyAdequately(world, i2, k1, k2, AluminiumMod.leavesAluminium, metaLeaves); } } } } } for (k1 = 0; k1 l; ++k1) { block = world.getBlock(x, y + k1, z); if (block.isAir(world, x, y + k1, z) || block.isLeaves(world, x, y + k1, z)) { setBlockAndNotifyAdequately(world, x, y + k1, z, AluminiumMod.logAluminium, metaWood); if (vinesGrow k1 0) { if (random.nextInt(3) 0 world.isAirBlock(x - 1, y + k1, z)) { this.setBlockAndNotifyAdequately(world, x - 1, y + k1, z, Blocks.vine, 8); } if (random.nextInt(3) 0 world.isAirBlock(x + 1, y + k1, z)) { this.setBlockAndNotifyAdequately(world, x + 1, y + k1, z, Blocks.vine, 2); } if (random.nextInt(3) 0 world.isAirBlock(x, y + k1, z - 1)) { this.setBlockAndNotifyAdequately(world, x, y + k1, z - 1, Blocks.vine, 1); } if (random.nextInt(3) 0 world.isAirBlock(x, y + k1, z + 1)) { this.setBlockAndNotifyAdequately(world, x, y + k1, z + 1, Blocks.vine, 4); } } } } if (vinesGrow) { for (k1 = y - 3 + l; k1 = y + l; ++k1) { i3 = k1 - (y + l); l1 = 2 - i3 / 2; for (i2 = x - l1; i2 = x + l1; ++i2) { for (j2 = z - l1; j2 = z + l1; ++j2) { if (world.getBlock(i2, k1, j2).isLeaves(world, i2, k1, j2)) { if (random.nextInt(4) == 0 world.getBlock(i2 - 1, k1, j2).isAir(world, i2 - 1, k1, j2)) { this.growVines(world, i2 - 1, k1, j2, 8); } if (random.nextInt(4) == 0 world.getBlock(i2 + 1, k1, j2).isAir(world, i2 + 1, k1, j2)) { this.growVines(world, i2 + 1, k1, j2, 2); } if (random.nextInt(4) == 0 world.getBlock(i2, k1, j2 - 1).isAir(world, i2, k1, j2 - 1)) { this.growVines(world, i2, k1, j2 - 1, 1); } if (random.nextInt(4) == 0 world.getBlock(i2, k1, j2 + 1).isAir(world, i2, k1, j2 + 1)) { this.growVines(world, i2, k1, j2 + 1, 4); } } } } } if (random.nextInt(5) == 0 l 5) { for (k1 = 0; k1 2; ++k1) { for (i3 = 0; i3 4; ++i3) { if (random.nextInt(4 - k1) == 0) { l1 = random.nextInt(3); this.setBlockAndNotifyAdequately(world, x + Direction.offsetX[Direction.rotateOpposite[i3]], y + l - 5 + k1, z + Direction.offsetZ[Direction.rotateOpposite[i3]], Blocks.cocoa, l1 2 | i3); } } } } } return true; } @Override protected boolean isReplaceable(World world, int x, int y, int z) { Block block = world.getBlock(x, y, z); return block.isAir(world, x, y, z) || block.isLeaves(world, x, y, z) || block.isWood(world, x, y, z) || this.func_150523_a(block); } @Override protected boolean func_150523_a(Block block) { return block.getMaterial() == Material.air || block.getMaterial() == Material.leaves || block == Blocks.grass || block == Blocks.dirt || block == Blocks.log || block == Blocks.log2 || block == Blocks.sapling || block == Blocks.vine; } private void growVines(World world, int x, int y, int z, int length) { this.setBlockAndNotifyAdequately(world, x, y, z, Blocks.vine, length); int i1 = 4; while (true) { --y; if (!world.getBlock(x, y, z).isAir(world, x, y, z) || i1 = 0) { return; } this.setBlockAndNotifyAdequately(world, x, y, z, Blocks.vine, length); --i1; } } } BlockAluminiumLog.java +長いので囲みます package tutorial.aluminiummod; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.BlockLog; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockAluminiumLog extends BlockLog { private IIcon[] iicon = new IIcon[2]; public BlockAluminiumLog() { super(); this.setCreativeTab(CreativeTabs.tabBlock); this.setHardness(2.0F); this.setStepSound(soundTypeWood); } @Override public int getRenderType() { return 31; } @Override public int onBlockPlaced(World world, int x, int y, int z, int side, float posX, float posY, float posZ, int meta) { // 設置された方向に応じてメタデータを設定する。 int metaType = meta 3; byte direction = 0; switch (side) { case 0 case 1 direction = 0; break; case 2 case 3 direction = 8; break; case 4 case 5 direction = 4; } return metaType | direction; } @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { int k = meta 12; int l = meta 3; return k == 0 (side == 1 || side == 0) ? this.getTopIcon(l) (k == 4 (side == 5 || side == 4) ? this.getTopIcon(l) (k == 8 (side == 2 || side == 3) ? this.getTopIcon(l) this.getSideIcon(l))); } @Override public int damageDropped(int meta) { return meta 3; } @Override @SideOnly(Side.CLIENT) protected IIcon getSideIcon(int meta) { return this.iicon[1]; } @Override @SideOnly(Side.CLIENT) protected IIcon getTopIcon(int meta) { return this.iicon[0]; } @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iicon) { this.iicon[0] = iicon.registerIcon(this.getTextureName() + "_top"); this.iicon[1] = iicon.registerIcon(this.getTextureName() + "_side"); } @Override protected ItemStack createStackedBlock(int meta) { return new ItemStack(Item.getItemFromBlock(this), 1, meta 3); } @Override public void breakBlock(World world, int x, int y, int z, Block block, int meta) { // 周囲の葉ブロックの消滅を始める。 byte b0 = 4; int i1 = b0 + 1; if (!world.checkChunksExist(x - i1, y - i1, z - i1, x + i1, y + i1, z + i1)) return; for (int ix = -b0; ix = b0; ++ix) { for (int iy = -b0; iy = b0; ++iy) { for (int iz = -b0; iz = b0; ++iz) { Block block1 = world.getBlock(x + ix, y + iy, z + iz); if (block1.isLeaves(world, x + ix, y + iy, z + iz)) { block1.beginLeavesDecay(world, x + ix, y + iy, z + iz); } } } } } @Override public boolean canSustainLeaves(IBlockAccess world, int x, int y, int z) { return true; } @Override public boolean isWood(IBlockAccess world, int x, int y, int z) { return true; } } BlockAluminiumLeaves.java +長いので囲みます package tutorial.aluminiummod; import java.util.ArrayList; import java.util.Random; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.BlockLeaves; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.world.ColorizerFoliage; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.IShearable; public class BlockAluminiumLeaves extends BlockLeaves implements IShearable { protected boolean isFancy; protected IIcon[] iicon = new IIcon[2]; int[] array; public BlockAluminiumLeaves() { super(); this.setTickRandomly(true); this.setCreativeTab(CreativeTabs.tabDecorations); this.setHardness(0.2F); this.setLightOpacity(1); this.setStepSound(soundTypeGrass); } @Override @SideOnly(Side.CLIENT) public int getBlockColor() { double d0 = 0.5D; double d1 = 1.0D; return ColorizerFoliage.getFoliageColor(d0, d1); } @Override @SideOnly(Side.CLIENT) public int getRenderColor(int color) { return ColorizerFoliage.getFoliageColorBasic(); } @Override @SideOnly(Side.CLIENT) public int colorMultiplier(IBlockAccess iBlockAccess, int x, int y, int z) { // バイオームの境目である程度スムーズになるよう、周囲9ブロックのバイオームから平均を求めている。 int ir = 0; int ig = 0; int ib = 0; for (int iz = -1; iz = 1; ++iz) { for (int ix = -1; ix = 1; ++ix) { int color = iBlockAccess.getBiomeGenForCoords(x + ix, z + iz).getBiomeFoliageColor(x + ix, y, z + iz); ir += (color 16711680) 16; ig += (color 65280) 8; ib += color 255; } } return (ir / 9 255) 16 | (ig / 9 255) 8 | ib / 9 255; } @Override public void breakBlock(World world, int x, int y, int z, Block block, int meta) { // 周囲の葉ブロックの消滅を始める。 byte b0 = 1; int i1 = b0 + 1; if (world.checkChunksExist(x - i1, y - i1, z - i1, x + i1, y + i1, z + i1)) { for (int j1 = -b0; j1 = b0; ++j1) { for (int k1 = -b0; k1 = b0; ++k1) { for (int l1 = -b0; l1 = b0; ++l1) { Block block1 = world.getBlock(x + j1, y + k1, z + l1); if (block1.isLeaves(world, x + j1, y + k1, z + l1)) { block1.beginLeavesDecay(world, x + j1, y + k1, z + l1); } } } } } } @Override public void updateTick(World world, int x, int y, int z, Random random) { if (world.isRemote) return; int meta = world.getBlockMetadata(x, y, z); // メタデータの二進数四桁目が0(周囲で原木/葉が破壊されていない)か、 // 三桁目が0以外(プレイヤーに設置されたもの)なら消滅させない。 if ((meta 8) == 0 || (meta 4) != 0) return; // 周囲のブロックを調査し、葉の消滅を抑えるブロック(原木)がなければ消滅させる。 byte b4 = 4; int i5 = b4 + 1; byte b32 = 32; int i1024 = b32 * b32; int i16 = b32 / 2; if (array == null) { array = new int[b32 * b32 * b32]; } int l1; if (world.checkChunksExist(x - i5, y - i5, z - i5, x + i5, y + i5, z + i5)) { for (int ix = -b4; ix = b4; ++ix) { for (int iy = -b4; iy = b4; ++iy) { for (int iz = -b4; iz = b4; ++iz) { Block block = world.getBlock(x + ix, y + iy, z + iz); if (!block.canSustainLeaves(world, x + ix, y + iy, z + iz)) { if (block.isLeaves(world, x + ix, y + iy, z + iz)) { array[(ix + i16) * i1024 + (iy + i16) * b32 + iz + i16] = -2; } else { array[(ix + i16) * i1024 + (iy + i16) * b32 + iz + i16] = -1; } } else { array[(ix + i16) * i1024 + (iy + i16) * b32 + iz + i16] = 0; } } } } for (l1 = 1; l1 = 4; ++l1) { for (int ix = -b4; ix = b4; ++ix) { for (int iy = -b4; iy = b4; ++iy) { for (int iz = -b4; iz = b4; ++iz) { if (array[(ix + i16) * i1024 + (iy + i16) * b32 + iz + i16] == l1 - 1) { if (array[(ix + i16 - 1) * i1024 + (iy + i16) * b32 + iz + i16] == -2) { array[(ix + i16 - 1) * i1024 + (iy + i16) * b32 + iz + i16] = l1; } if (array[(ix + i16 + 1) * i1024 + (iy + i16) * b32 + iz + i16] == -2) { array[(ix + i16 + 1) * i1024 + (iy + i16) * b32 + iz + i16] = l1; } if (array[(ix + i16) * i1024 + (iy + i16 - 1) * b32 + iz + i16] == -2) { array[(ix + i16) * i1024 + (iy + i16 - 1) * b32 + iz + i16] = l1; } if (array[(ix + i16) * i1024 + (iy + i16 + 1) * b32 + iz + i16] == -2) { array[(ix + i16) * i1024 + (iy + i16 + 1) * b32 + iz + i16] = l1; } if (array[(ix + i16) * i1024 + (iy + i16) * b32 + (iz + i16 - 1)] == -2) { array[(ix + i16) * i1024 + (iy + i16) * b32 + (iz + i16 - 1)] = l1; } if (array[(ix + i16) * i1024 + (iy + i16) * b32 + iz + i16 + 1] == -2) { array[(ix + i16) * i1024 + (iy + i16) * b32 + iz + i16 + 1] = l1; } } } } } } } l1 = array[i16 * i1024 + i16 * b32 + i16]; if (l1 = 0) { world.setBlockMetadataWithNotify(x, y, z, meta 7, 4); } else { this.removeLeaves(world, x, y, z); } } @Override @SideOnly(Side.CLIENT) public void randomDisplayTick(World world, int x, int y, int z, Random random) { // 水を滴らせる? if (world.canLightningStrikeAt(x, y + 1, z) !World.doesBlockHaveSolidTopSurface(world, x, y - 1, z) random.nextInt(15) == 1) { double dx = x + random.nextFloat(); double dy = y - 0.05D; double dz = z + random.nextFloat(); world.spawnParticle("dripWater", dx, dy, dz, 0.0D, 0.0D, 0.0D); } } private void removeLeaves(World world, int x, int y, int z) { // ドロップさせ、空気ブロックに置き換える。 this.dropBlockAsItem(world, x, y, z, world.getBlockMetadata(x, y, z), 0); world.setBlockToAir(x, y, z); } @Override public int quantityDropped(Random random) { return random.nextInt(20) == 0 ? 1 0; } @Override public Item getItemDropped(int meta, Random random, int fortune) { return Item.getItemFromBlock(AluminiumMod.saplingAluminium); } @Override public void dropBlockAsItemWithChance(World world, int x, int y, int z, int meta, float chance, int par7) { super.dropBlockAsItemWithChance(world, x, y, z, meta, 1.0f, par7); } @Override protected void func_150124_c(World world, int x, int y, int z, int meta, int chance) {} @Override protected int func_150123_b(int meta) { return 20; } @Override public boolean isOpaqueCube() { return !isFancy; } @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { return iicon[isFancy ? 0 1]; } @Override @SideOnly(Side.CLIENT) public void setGraphicsLevel(boolean isFancy) { this.isFancy = isFancy; } @Override protected ItemStack createStackedBlock(int meta) { return new ItemStack(Item.getItemFromBlock(this), 1, 0); } @Override public String[] func_150125_e() { return null; } @Override @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockAccess iBlockAccess, int x, int y, int z, int side) { Block block = iBlockAccess.getBlock(x, y, z); // 処理優先で隣が同じブロックだったらfalse。 return !isFancy block == this ? false super.shouldSideBeRendered(iBlockAccess, x, y, z, side); } @Override public boolean isShearable(ItemStack item, IBlockAccess world, int x, int y, int z) { return true; } @Override public ArrayList ItemStack onSheared(ItemStack item, IBlockAccess world, int x, int y, int z, int fortune) { ArrayList ItemStack ret = new ArrayList ItemStack (); ret.add(new ItemStack(this, 1, world.getBlockMetadata(x, y, z) 3)); return ret; } @Override public void beginLeavesDecay(World world, int x, int y, int z) { int meta = world.getBlockMetadata(x, y, z); if ((meta 8) == 0) { world.setBlockMetadataWithNotify(x, y, z, meta | 8, 4); } world.setBlockMetadataWithNotify(x, y, z, world.getBlockMetadata(x, y, z) | 8, 4); } @Override public boolean isLeaves(IBlockAccess world, int x, int y, int z) { return true; } @Override public ArrayList ItemStack getDrops(World world, int x, int y, int z, int meta, int fortune) { ArrayList ItemStack ret = new ArrayList ItemStack (); int chance = this.func_150123_b(meta); if (fortune 0) { chance -= 2 fortune; if (chance 10) chance = 10; } if (world.rand.nextInt(chance) == 0) ret.add(new ItemStack(this.getItemDropped(meta, world.rand, fortune), 1, this.damageDropped(meta))); chance = 200; if (fortune 0) { chance -= 10 fortune; if (chance 40) chance = 40; } this.captureDrops(true); this.func_150124_c(world, x, y, z, meta, chance); ret.addAll(this.captureDrops(false)); return ret; } @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister register) { iicon[0] = register.registerIcon(this.getTextureName()); iicon[1] = register.registerIcon(this.getTextureName() + "_opaque"); } } ItemAluminiumLeaves.java package tutorial.aluminiummod; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.BlockLeaves; import net.minecraft.item.ItemLeaves; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; public class ItemAluminiumLeaves extends ItemLeaves { protected final Block leaves; public ItemAluminiumLeaves(Block block) { super((BlockLeaves) block); this.leaves = block; this.setMaxDamage(0); this.setHasSubtypes(true); } @Override public int getMetadata(int meta) { // 設置時は二進数三桁目が1になる。 return meta | 4; } @Override public String getUnlocalizedName(ItemStack itemStack) { return leaves.getUnlocalizedName(); } @Override @SideOnly(Side.CLIENT) public IIcon getIconFromDamage(int meta) { return leaves.getIcon(0, meta); } @Override @SideOnly(Side.CLIENT) public int getColorFromItemStack(ItemStack itemStack, int pass) { return leaves.getRenderColor(itemStack.getItemDamage()); } } 解説 Block +長いので囲みます Block setTickRandomly(boolean needsRandomTick) trueに設定すると、ランダムでupdateTickが呼ばれるようになる。 植物の成長判定や葉の消滅などに使う。 void setBlockBounds(float minX, float minY, float minZ, float maxX, float maxY, float maxZ) ブロックの大きさを設定する。 カーソルがあったかどうかの判定や、合わせたときの枠線の描画に使われる。 boolean canPlaceBlockAt(World world, int x, int y, int z) ブロックを設置できるかを判定する。 void onNeighborBlockChange(World world, int x, int y, int z, Block block) 隣接するブロックが更新された時の処理。 boolean canBlockStay(World world, int x, int y, int z) ブロックがとどまれるかどうか。 AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) 当たり判定を返す。 BlockではAxisAlignedBB.getBoundingBox(x + minX, y + minY, z + minZ, x + maxX, y + maxY, z + maxZ)を返している。 このメソッドをオーバーライドすれば当たり判定を変更できる。 boolean isOpaqueCube() 不透明なブロックかどうかを返す。 boolean renderAsNormalBlock() 通常のブロックのように描画するかどうかを返す。 柵や壁がつながるかどうかの判定にも使われる。 int getRenderType() レンダ―タイプを返す。 通常は0。 苗木や花、キノコなどは1。 原木、干草の俵などは31。 1を返すとTileEntityの設定などが適用される。 void updateTick(World world, int x, int y, int z, Random random) ブロックのアップデート時の処理。 needsRandomTickがtrueの時はランダムに呼ばれる。 falseだと何tick後に呼び出すなどの処理が可能。 int onBlockPlaced(World world, int x, int y, int z, int side, float posX, float posY, float posZ, int meta) ブロックが設置された時の処理。 ItemStack createStackedBlock(int meta) メタデータを反映してItemStackを生成し返す。 void breakBlock(World world, int x, int y, int z, Block block, int meta) ブロックが破壊された時の処理。 boolean canSustainLeaves(IBlockAccess world, int x, int y, int z) 葉を維持させられるブロックかどうかを返す。 boolean isWood(IBlockAccess world, int x, int y, int z) 原木かどうかを返す。 木の生成時の判定に使う。 Block setLightOpacity(int lightOpacity) 光の透過度を設定する。 0で不透過。1で完全に透過。 int getBlockColor() ブロックの色を返す。 int getRenderColor(int color) 描画するときの色を返す。 インベントリ内での描画などに使う。 int colorMultiplier(IBlockAccess iBlockAccess, int x, int y, int z) ブロックを描画するときの色の係数を返す。 void randomDisplayTick(World world, int x, int y, int z, Random random) クライアントで描画されるときにランダムで呼ばれる。 int quantityDropped(Random random) ドロップ数を返す。 Item getItemDropped(int meta, Random random, int fortune) ドロップするアイテムを返す。 void dropBlockAsItemWithChance(World world, int x, int y, int z, int meta, float chance, int par7) ブロックをドロップさせる。 boolean shouldSideBeRendered(IBlockAccess iBlockAccess, int x, int y, int z, int side) 引数の面を描画するかどうか。 引数の座標はメソッドを呼ばれたブロックではなく、その隣にあるブロック。 Blockでは、ブロックの大きさが通常より小さいでないか、引数の座標のブロックが不透明でないならtrueを返す。 void beginLeavesDecay(World world, int x, int y, int z) 葉の消滅を始める。 boolean isLeaves(IBlockAccess world, int x, int y, int z) 葉かどうかを返す。 ArrayList ItemStack getDrops(World world, int x, int y, int z, int meta, int fortune) ドロップアイテムのリストを返す。 BlockBush boolean canPlaceBlockOn(Block block) 引数のブロックの上に設置が可能かどうか。 void checkAndDropBlock(World world, int x, int y, int z) 設置されている状況が保てるかどうか判定し、保てないならドロップさせる。 BlockSapling void func_149879_c(World world, int x, int y, int z, Random random) 苗木を成長させる処理。 void func_149878_d(World world, int x, int y, int z, Random random) 木を生成する処理。 boolean func_149880_a(World world, int x, int y, int z, int type) 引数の座標のブロックが同じ種類の苗木かどうか。 ダークオーク・松などの生成に使っている。 EnumPlantType 植物の植え方を表すenum。 Plains 苗木や草、花など。 草・土・耕された土に植えられる。 ForgeDirection 方向を表すenum。 UP 上方向。 AxisAlignedBB ブロックの当たり判定などを保持するクラス。 TerrainGen 生成に関するEventを呼び出すクラス。 saplingGrowTree SaplingGrowTreeEventを呼び出す。 IPlantable 植物のインターフェース。 EnumPlantType getPlantType(IBlockAccess world, int x, int y, int z) 植物の植え方によってenumを返す。 Block getPlant(IBlockAccess world, int x, int y, int z) 引数の座標にある植物を返す。 基本的にはthisでよい。 int getPlantMetadata(IBlockAccess world, int x, int y, int z) 植物のメタデータを返す。 IGrowable 骨粉が使用できるブロックのインターフェース。 boolean func_149851_a(World world, int x, int y, int z, boolean isRemote) 骨粉が使用できるかどうかを返す。 boolean func_149852_a(World world, Random random, int x, int y, int z) 成長させるかどうかを返す。 void func_149853_b(World world, Random random, int x, int y, int z) 成長させる処理。 BlockRotatedPillar IIcon getSideIcon(int meta) 横の面のアイコンを返す。 IIcon getTopIcon(int meta) 上下面のアイコンを返す。 ColorizerFoliage 葉や草などの色を扱うクラス。 int getFoliageColor(double temperature, double humidity) 気温・湿度から色を生成して返す。 int getFoliageColorBasic() 基本の色を返す。 4764952(0x48A518, RGB (72,181,24))。 BlockLeaves void func_150124_c(World world, int x, int y, int z, int meta, int chance) リンゴのドロップに使うメソッド。 int func_150123_b(int meta) 苗木のドロップ確率を返す。 void setGraphicsLevel(boolean isFancy) 描画優先/処理優先の設定を反映する。 String[] func_150125_e() 木の種類名の配列を返す。 void removeLeaves(World world, int x, int y, int z) 引数の座標にあるブロックをドロップして破壊する。 privateなのでBlockAluminiumLeavesでは新しく実装していることになる。 IShearable ハサミで回収できるブロックのインターフェース。 boolean isShearable(ItemStack item, IBlockAccess world, int x, int y, int z) ハサミで回収できるかどうかを返す。 ArrayList ItemStack onSheared(ItemStack item, IBlockAccess world, int x, int y, int z, int fortune) ハサミで回収された時の処理。 ハサミで回収した時のドロップアイテムのリストを返す。 使用例 星の樹MODは木のカスタマイズ機能の影響で非常にわかりにくくなっているため、使用例は載せません。 Beta 1.0.0以前のコードは参考になるかもしれません。 コメント この項目に関する質問などをどうぞ。 左のメニューでTileEntityの追加を押すとこのページに来てしまいます。 - 名無しさん 2016-01-09 22 38 31 申し訳ありません。訂正いたしました。 - Tom Kate 2016-01-10 08 41 18 1.7.10で丸ごとコピーしてみたのですが、preInitのLeavesのところで落ちてしまいます。 - 名無しさん 2016-04-30 05 28 57 ご報告ありがとうございます。修正しました。 - 赤砂蛇凪浜 2016-04-30 16 13 34 葉のテクスチャは新しい文で指定する必要があるのでしょうか - 名無しさん 2016-05-20 16 43 05 テクスチャの指定に関する部分はいくつかあるため、どこについてなのかもう少し詳しくお願いします。 - 赤砂蛇凪浜 2016-05-20 17 28 58 葉のブロックのテクスチャ(描画設定で切り替わったり)です。例えばここのコードを丸ごと持ってきた場合、画像ファイルの名前や位置次第でテクスチャは表示されうるのでしょうか。すみません枝間違えました - ポン酢 2016-05-20 20 44 34 入力ミスのようですので、コメントは片方削除させていただきます。チュートリアルに不備があり、葉のテクスチャの指定がうまくできていなかったので修正しました。AluminiumMod.javaおよびBlockAluminiumLeaves.javaに変更がありますのでご確認ください。ご迷惑をおかけして申し訳ありませんでした。解説がわかりにくければ、またご質問いただけるとありがたいです。 - 赤砂蛇凪浜 2016-05-22 13 42 04 同じIDでいくつかの原木ブロックを追加するには、どのようにすれば良いのでしょうか。 - 名無しさん 2016-06-17 23 31 47 「メタデータを持つブロックの追加」に記載している方法で、getSubBlocksなどをオーバーライドしてテクスチャの指定を少し変更すればできます。ただし、原木の場合は向きをメタデータで記録しているので、一つのIDで追加できるのは4種類までです。バニラのコードや、(カスタム機能の影響で少しわかりにくくなっていますが)星の樹MODのソースコードも見てみてください。返信が遅くなってしまい、申し訳ありません。 - 赤砂蛇凪浜 2016-06-25 10 48 37 ありがとうございます! - 名無しさん 2016-06-25 21 53 03 返信するとこ間違えました... - 名無しさん 2016-06-25 21 53 43 このソースコードは1.10でも使用することができますか? - 名無しさん 2016-10-06 00 48 58 こちらのチュートリアルは記載の通り1.7.10版のものです。1.8以降は大きくコーディングが変更されておりますので使うことはできません。 - Tom Kate 2016-10-06 23 07 20 名前